package com.orange.common.utils;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.IOException;

@Slf4j
public class JsonReader {
    private static final ObjectMapper mapper = new ObjectMapper();

    /**
     * 通用方法：读取 JSON 文件并解析为指定类型
     *
     * @param filePath JSON 文件路径
     * @param type     目标类型（支持单个对象或集合）
     * @return 解析后的对象
     */
    public static <T> T readJsonFile(String filePath, Class<T> type) {
        try {
            return mapper.readValue(new File(filePath), type);
        } catch (IOException exception) {
            log.error("解析文件失败: " + exception.getMessage());
            return null;
        }
    }

    /**
     * 通用方法：读取 JSON 文件并解析为泛型集合（如 List<T>）
     *
     * @param filePath JSON 文件路径
     * @param typeRef  目标类型引用（用于处理泛型）
     * @return 解析后的对象
     */
    public static <T> T readJsonFile(String filePath, TypeReference<T> typeRef) {
        try {
            return mapper.readValue(new File(filePath), typeRef);
        } catch (IOException exception) {
            log.error("解析文件失败: " + exception.getMessage());
            return null;
        }
    }
}